package com.hy;

/**
 * Created With IntelliJ IDEA.
 * Descriptions:出发运算
 * <p>
 * User:Mr.Du
 * Date:2024/3/19
 * Time:10:27
 */
public class Divide {

    /**
     * 这个方法用于计算两个整数的除法。注意，这个方法特别处理了整数最小值除以-1的情况，避免了溢出。
     *
     * @param dividend 被除数。整数。
     * @param divisor 除数。整数。
     * @return 两个整数相除的结果。整数。
     */
    public int divide(int dividend, int divisor) {
        // 特殊情况处理：整数最小值除以-1会溢出，此处将其正确处理为最大整数值。
        if(dividend == Integer.MIN_VALUE && divisor == -1) return Integer.MAX_VALUE;
        // 将被除数和除数转换为正数处理，避免负数位运算的复杂性。
        long x = Math.abs((long) dividend);
        long y = Math.abs((long) divisor);
        int res = 0; // 初始化结果为0。

        // 通过位运算逐步确定商的每一位。
        for(int i = 31; i >= 0; i--){
            // 判断当前位是否能够被除数整除。
            if((x >> i) >= y){
                res += 1 << i; // 当前位加入到结果中。
                x -= y << i; // 更新被除数，减去已经除掉的部分。
            }
        }
        // 根据被除数和除数的符号，确定最终结果的符号。
        return (dividend ^ divisor) < 0? -res : res;
    }

    public static void main(String[] args) {
        Divide divide = new Divide();
        System.out.println(divide.divide(-1, 1));
    }
}
